﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Joel.Vishnu.Modelo.Entidades;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Presentacion;

namespace Joel.Vishnu.Formularios
{
    public partial class ProductoSubCategorias : Form, IProductoSubCategorias
    {
        #region Constructores

        public ProductoSubCategorias()
        {
            InitializeComponent();
            presentador = new ProductoSubCategoriasPresentador(this);
            grdProductoSubCategorias.AutoGenerateColumns = false;
            grdProductoSubCategorias.DataSource = bsProductoSubCategorias;
        }

        #endregion

        #region Atributos

        private EnumEstado estado;
        private ProductoSubCategoriasPresentador presentador;
        private Int32 productoSubCategoriaId;

        #endregion

        #region Propiedades

        public Int32 ProductoSubCategoriaId
        {
            get { return productoSubCategoriaId; }
        }

        public String Nombre
        {
            get { return txtNombre.Text; }
        }

        public Int32 ProductoCategoriaId
        {
            get { return (Int32)cboProductoCategoria.SelectedValue; }
        }

        public List<ProductoCategoria> ListaProductoCategorias
        {
            set
            {
                cboProductoCategoria.ValueMember = "Id";
                cboProductoCategoria.DisplayMember = "Nombre";
                cboProductoCategoria.DataSource = value;
            }
        }

        public EnumEstado Estado
        {
            get { return estado; }
        }

        public List<ProductoSubCategoria> ListaProductoSubCategorias
        {
            set { bsProductoSubCategorias.DataSource = value; }
        }

        #endregion

        #region Metodos
        //TODO: Arreglar ID Prod Sub Cat
        public void HabilitarControles()
        {
            txtNombre.Enabled = !txtNombre.Enabled;
            cboProductoCategoria.Enabled = !cboProductoCategoria.Enabled;
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;
            btnInsertar.Enabled = !btnInsertar.Enabled;
            btnModificar.Enabled = !btnModificar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;
            lblNombre.Enabled = !lblNombre.Enabled;
            lblProductoCategoria.Enabled = !lblProductoCategoria.Enabled;
            grdProductoSubCategorias.Enabled = !grdProductoSubCategorias.Enabled;
        }

        public void LimpiarCampos()
        {
            productoSubCategoriaId = 0;
            txtNombre.Text = String.Empty;
            cboProductoCategoria.Text = String.Empty;
        }

        public void ActualizarDatos()
        {
            if (bsProductoSubCategorias.Current != null)
            {
                productoSubCategoriaId = ((ProductoSubCategoria)bsProductoSubCategorias.Current).Id;
                txtNombre.Text = ((ProductoSubCategoria)bsProductoSubCategorias.Current).Nombre;
                cboProductoCategoria.Text = ((ProductoSubCategoria)bsProductoSubCategorias.Current).ProductoCategoria.Nombre;
            }
            else
                LimpiarCampos();
        }

        #endregion

        #region Eventos

        private void ProductoSubCategorias_Load(object sender, EventArgs e)
        {
            try
            {
                presentador.Inicializar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnInsertar_Click(object sender, EventArgs e)
        {
            estado = EnumEstado.NUEVO;
            HabilitarControles();
            LimpiarCampos();
            txtNombre.Focus();
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            estado = EnumEstado.MODIFICAR;
            HabilitarControles();
            txtNombre.Focus();
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (bsProductoSubCategorias.Current != null)
                    if (MessageBox.Show("¿Está seguro que desea eliminar la sub categoria de producto?", "Eliminar sub categoria", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        presentador.Eliminar();
                        LimpiarCampos();
                    }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                presentador.Aceptar();
                HabilitarControles();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            HabilitarControles();
            ActualizarDatos();
        }

        private void grdProductoSubCategorias_SelectionChanged(object sender, EventArgs e)
        {
            ActualizarDatos();
        }

        #endregion
    }
}
